As alterações nos dados raramente chegam sozinhas: uma transferência tem de debitar uma conta e creditar outra, e um pedido tem de reservar stock e registar um pagamento. Se o sistema parar a meio, a base de dados fica a descrever um mundo que nunca existiu. Uma transação é a resposta da base de dados para esse problema — uma sequência de uma ou mais operações que a base de dados trata como uma única e indivisível unidade de trabalho.
Tudo, ou nada
Dentro de uma transação, cada operação pertence a um único resultado. A base de dados nunca expõe um estado final em que apenas parte da transação ocorreu. O exemplo clássico é uma transferência entre duas contas bancárias: reduzir o saldo da conta de origem e, em seguida, aumentar o saldo da conta de destino. Se apenas o primeiro passo fosse bem-sucedido, o dinheiro desapareceria; se apenas o segundo, o dinheiro apareceria do nada. Envolver ambos os passos numa única transação elimina as duas possibilidades.
Esta garantia de tudo ou nada chama-se atomicidade. Commit é o ato que torna permanentes as alterações da transação; uma transação que nunca faz commit não deixa qualquer vestígio. Durabilidade acrescenta a peça final: depois de o commit ter sido concluído, a alteração sobrevive mesmo que a máquina perca a energia um momento depois.
Uma transação é uma fronteira
Ajuda visualizar uma transação como uma fronteira traçada em torno de um conjunto de instruções. Antes da fronteira e depois dela, os dados cumprem as regras impostas pela estrutura. Dentro da fronteira existem estados intermédios — uma conta já está debitada enquanto a outra ainda não foi creditada — mas esses estados são privados da transação. As instruções posteriores noutras sessões não os tratam como a verdade.
Dois papéis ao mesmo tempo
Por isso, as transações desempenham dois papéis. O primeiro é o tratamento de falhas: se o processo falhar, a ligação cair ou uma instrução gerar um erro, a base de dados pode restaurar o estado que existia antes de a transação começar. O segundo é o controlo de visibilidade: enquanto o trabalho está em curso, os outros leitores ficam protegidos do resultado inacabado. Estes dois papéis estão relacionados, mas não são idênticos — a atomicidade decide se as alterações são mantidas, enquanto a visibilidade é regida pelo isolamento, a configuração que controla o quanto as transações concorrentes podem ver umas das outras.
